$Description$
$N$个数,$M$组询问,每次问$[l,r]$中有多少个数出现正偶数次。
$Solution:$
考虑分块
先设$:f[i][j]$表示$i$块到$j$块的有多少个数出现正偶数次;
$sum[i][j]$表示前$i$块中,数值$j$的出现次数;
预处理$f$数组和$sum$数组,时间复杂度$O(n\sqrt n)$
处理询问时,设$res$为最终答案,$A$为询问左端点所在块,$B$为询问右端点所在块,先把$res$初值设为$f[A+1][B-1]$,然后处理两侧的不完整块.
对于一个值$j$,它在第$A+1$个块到第$B-1$个块中出现的次数就是$sum[B-1][j]-sum[A][j]$(类似于前缀和)
在处理不完整块的时候,若当前点的下标为$j$,那么只需要判断$++cnt[w[j]]+sum[B-1][w[j]]-sum[A][w[j]]$的奇偶性,并特判一下$0$变$1$的情况,然后更改$res$的值即可.
$Code$
1 |
|